package main

import "go-leetcode/leetcode/utils"

// 102. 二叉树的层序遍历
func main() {

}

func levelOrder(root *utils.TreeNode) [][]int {
	// 二叉树的层序遍历，使用广度优先算法
	nodeQueue := []*utils.TreeNode{
		root,
	}
	var res [][]int
	if root == nil {
		return res
	}
	for len(nodeQueue) > 0 {
		queueLen := len(nodeQueue)
		var levelRes []int

		for i := 0; i < queueLen; i++ {
			node := nodeQueue[i]
			if node.Left != nil {
				nodeQueue = append(nodeQueue, node.Left)
			}
			if node.Right != nil {
				nodeQueue = append(nodeQueue, node.Right)
			}
			levelRes = append(levelRes, node.Val)
		}
		res = append(res, levelRes)
		nodeQueue = nodeQueue[queueLen:]
	}

	return res
}

//给你二叉树的根节点 root ，返回其节点值的 层序遍历 。 （即逐层地，从左到右访问所有节点）。
//
//示例 1：
//
//输入：root = [3,9,20,null,null,15,7]
//输出：[[3],[9,20],[15,7]]
//示例 2：
//
//输入：root = [1]
//输出：[[1]]
//示例 3：
//
//输入：root = []
//输出：[]
//
//提示：
//
//树中节点数目在范围 [0, 2000] 内
//-1000 <= Node.val <= 1000
